package com.liumin.publiclib.helper;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;

import java.util.ArrayList;
import java.util.List;

/**
 * 作者:  Liumin
 * 时间：2024/9/5 15:07
 * 描述：JSON操作工具类
 */
public class JSONHelper {
    /**
     * 把java对象转换成JSON数据
     * @param obj java对象
     * @return json字符串
     */
    public static String toJsonString(Object obj){
        if(obj == null) {return "";}
        String jsonStr = JSON.toJSONString(obj);
        return jsonStr;
    }

    /**
     * 将json字符串反序列化为指定的对象
     * @param jsonStr json字符串
     * @param clazz 指定的java对象
     * @return 对象
     */
    public static <T> T parseObject(String jsonStr, Class<T> clazz){
        try {
            T obj = JSON.parseObject(jsonStr, clazz);
            return obj;
        } catch (Exception e) {
            return  null;
        }
    }

    /**
     * 把JSON数据转换成指定的java对象列表
     * @param jsonString json串
     * @param cls 指定的java对象
     * @return 对象列表
     */
    public static<T> List<T> parseArray(String jsonString, Class<T> cls) {
        List<T> list = new ArrayList<>();
        try {
            list = JSON.parseArray(jsonString, cls);
        } catch (Exception e) {
        }
        return list;
    }

    /**
     * 在json字符串中查找指定的值
     * @param jsonStr json字符串
     * @param key key值
     * @return value值
     */
    public static String readJsonString(String jsonStr, String key){
        try {
            JSONObject jsonObject = JSON.parseObject(jsonStr);
            return jsonObject.getString(key);
        } catch (Exception e) {
            return "";
        }
    }

    /**
     * 根据key值在json中查找对应的value
     * @param jsonStr json字符串
     * @param key 给定的key值
     * @param clazz 指定的java对象
     * @return value值
     */
    public static <T> T readJsonObject(String jsonStr, String key, Class<T> clazz){
        try {
            JSONObject jsonObject = JSON.parseObject(jsonStr);
            T obj = jsonObject.getObject(key, clazz);
            return obj;
        } catch (Exception e) {
            return null;
        }
    }
}
